<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Андрей
 * Date: 10.05.12
 * Time: 23:09
 * To change this template use File | Settings | File Templates.
 */
 

    /*
     * Mapper для NoteModel
     * наследник DAO 
     */


    class NoteModelMapper extends DAOBaseAbstract
    {

        public function __construct()
        {
            // конструктор родителя
            parent::__construct();

            // установить данные таблицы, и primary keyы
            $this->_tableName = 'usersnotes';
            $this->_primaryKey = 'noteId';
        }

        
        /*
         *  Получить заметку по ID
         */
        public function fetchNoteById($id)
        {
            if (null == $query = $this->select($id) )
                return false;

            $query = $query[0];
            
            $note = new NoteModel($query['userId'], $query['noteId'], $query['text'],
                                  $query['time'], $query['date']);
            $note->setYoutube($query['youtube'])
                 ->setVimeo($query['vimeo']);

            return $note;
        }

        
        /*
         * Сохранение заметки
         */
        public function saveNote(NoteModel $note)
        {
            // результат действия
            $res = null;
            // данные для вставки, обновления.
            $data = array(
                        "userId" => $note->getUserId(),
                        "text" => $note->getText(),
                        "time" => $note->getTime(),
                        "date" => $note->getDate(),
                        "youtube" => $note->getYoutube(),
                        "vimeo" => $note->getVimeo()
                    );

            // если добавление заметки
            if ($note->getNoteId() == null)
            {
                $res = $this->insert($data);
                
            } else{
                // если обновление заметки
                $data["noteId"] = $note->getNoteId();
                $res = $this->update($data);
            }

            // удачно?
            if ($res)
                return true;
            else
                return false;
        }

        /*
         * Удалить заметку
         */
        
        public function removeNote(NoteModel $note)
        {
            // удалить по Id
            $res = $this->delete($note->getNoteId());

            // удачно =)
            if ($res)
                return true;
            else
                return false;
        }

        /*
         *  Получить массив записей пользователя по Id
         *  TODO
         *  также можно получить ограниченное число записей
         *  второй параметр $limit
         *  по умолчанию все записи
         */

        public function fetchUserNotes($userId)
        {
            // выбрать данные
            $res = $this->select($userId, 'userId');
            // заметки
            $notes = array();

            // Если нет данных
            // то вернуть пустой массив
            if ( empty($res) )
                return $notes;

            $count = count($res);
            for($i = 0; $i < $count; $i++)
            {
                // вернуть массив заметок, где ключ - id заметки
                $tmpNote = new NoteModel($res[$i]['userId'], $res[$i]['noteId'],
                                        $res[$i]['text'], $res[$i]['time'], $res[$i]['date']);
                $tmpNote->setYoutube($res[$i]['youtube'])
                        ->setVimeo($res[$i]['vimeo']);

                $notes[$i] = $tmpNote;
            }

            // вернуть заметки
            return $notes;
        }

    }